LLM 25일 코스 - Day 9: Meta Llama 시리즈

Day 9: Meta Llama 시리즈

Meta(구 Facebook)의 Llama는 오픈소스 LLM의 판도를 바꾼 모델입니다. 누구나 무료로 다운로드하여 연구하고, 수정하고, 심지어 상업적으로 사용할 수 있습니다.

Llama 모델 변천사

아래 표는 대표 버전 흐름을 이해하기 위한 요약입니다. 최신 세부 스펙(컨텍스트/라이선스/권장 사용)은 모델 카드와 공식 문서를 우선 확인하세요.

모델크기학습 토큰컨텍스트라이선스
Llama 27B / 13B / 70B2T4KLlama 2 Community
Llama 38B / 70B15T8KLlama 3 Community
Llama 3.18B / 70B / 405B15T+128KLlama 3.1 Community
Llama 3.21B / 3B / 11B / 90B128KLlama 3.2 Community

주목할 점: Llama 3는 Llama 2보다 학습 토큰이 7배 이상 많습니다. Chinchilla 법칙을 훨씬 초과하여 작은 모델의 성능을 끌어올린 전략입니다.

Ollama로 로컬 실행

Ollama는 로컬에서 LLM을 가장 쉽게 실행하는 도구입니다.

# 1단계: Ollama 설치 (https://ollama.ai)
# 2단계: 터미널에서 모델 다운로드
#   ollama pull llama3.1:8b
#   ollama pull llama3.1:70b  (VRAM 40GB+ 필요)

# 3단계: Python에서 사용
# pip install ollama
import ollama

response = ollama.chat(
    model="llama3.1:8b",
    messages=[
        {"role": "system", "content": "한국어로 답해주세요."},
        {"role": "user", "content": "퀵소트 알고리즘을 설명해주세요."},
    ],
)

print(response["message"]["content"])

HuggingFace에서 다운로드

# pip install transformers torch accelerate
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_name = "meta-llama/Meta-Llama-3.1-8B-Instruct"

# HuggingFace 토큰 필요 (https://huggingface.co/settings/tokens)
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16,   # 메모리 절약 (16비트)
    device_map="auto",           # GPU 자동 배치
)

# Llama 3 대화 형식
messages = [
    {"role": "system", "content": "You are a helpful assistant. 한국어로 답해주세요."},
    {"role": "user", "content": "재귀 함수를 설명해주세요."},
]

input_ids = tokenizer.apply_chat_template(
    messages, return_tensors="pt"
).to(model.device)

output = model.generate(input_ids, max_new_tokens=256, temperature=0.7)
response = tokenizer.decode(output[0][input_ids.shape[-1]:], skip_special_tokens=True)
print(response)

Ollama REST API 활용

import requests
import json

# Ollama는 기본적으로 localhost:11434에서 실행
def query_ollama(prompt, model="llama3.1:8b"):
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": model,
            "prompt": prompt,
            "stream": False,
            "options": {
                "temperature": 0.7,
                "num_predict": 256,
            },
        },
    )
    return response.json()["response"]

# OpenAI 호환 API도 지원
def query_ollama_openai_compat(prompt, model="llama3.1:8b"):
    response = requests.post(
        "http://localhost:11434/v1/chat/completions",
        json={
            "model": model,
            "messages": [{"role": "user", "content": prompt}],
        },
    )
    return response.json()["choices"][0]["message"]["content"]

result = query_ollama("파이썬에서 리스트와 튜플의 차이는?")
print(result)

로컬 실행 시 하드웨어 요구사항

모델 크기VRAM 필요량 (FP16)VRAM 필요량 (4bit)추천 GPU
1B~3B2~6 GB1~2 GB내장 GPU 가능
8B16 GB5 GBRTX 3060 이상
70B140 GB35~40 GBA100 80GB 또는 멀티 GPU
405B810 GB200+ GB클러스터 필요

4bit 양자화(Quantization)를 사용하면 VRAM을 약 1/4로 줄일 수 있습니다.

오늘의 연습문제

  1. Ollama를 설치하고 llama3.1:8b 모델을 다운로드하여 한국어로 대화해보세요. 응답 속도와 한국어 품질을 기록하세요.
  2. 같은 질문을 llama3.1:8b와 상용 경량 API 모델(최신)을 각각 보내고 응답 품질을 비교해보세요. 로컬 모델의 장단점은 무엇인가요?
  3. Llama 3의 라이선스를 읽고, 상업적 사용에 어떤 제한이 있는지 정리해보세요. (월간 활성 사용자 7억 명 조항)

이 글이 도움이 되었나요?